// @Desc:
// @CreateTime: 2020/10/11
package config

import (
    "encoding/json"
    "fmt"
    "github.com/kylelemons/go-gypsy/yaml"
    "log"
    "strings"
)

var (
    Configs *AllConf // 对外出口
)

// 保存所有配置
type AllConf struct {
    MysqlConf MysqlConf `json:"mysqlConf"`
    LogConf LogConf `json:"logConf"`
    AuthConf AuthConf `json:"authConf"`
}

// mysql 配置
type MysqlConf struct {
    MysqlHost string `json:"mysqlHost"`
    Username  string `json:"username"`
    Password  string `json:"password"`
    DbName    string `json:"dbname"`
}

// 日志配置
type LogConf struct {
    LogPath      string `json:"logPath"`
    LogSize      uint8  `json:"logSize,string"`
    MaxSaveFiles uint8  `json:"maxSaveFiles,string"`
    MaxSaveDays  uint8  `json:"maxSaveDays,string"`
    IsProduction bool   `json:"isProduction,string"`
}

// 权限配置
type AuthConf struct {
    Secret string `json:"secret"`
    TokenExpire string `json:"tokenExpire"`
    WxToken string `json:"wxToken"`
}


// GetInfo 返回conf 详情
func InitConf(projectDir string) {
    var configFile string
    // 生成环境为 linux, 路径为 /
    isProduction := strings.Contains(projectDir, "/")
    if isProduction {
        configFile = fmt.Sprintf("%s/config/config.yaml", projectDir)
    } else {
        configFile = fmt.Sprintf("%s\\config\\config.yaml", projectDir)
    }
    config, err := yaml.ReadFile(configFile)
    if err != nil {
        log.Fatalf("load config is failed, err: %v", err)
    }
    // 将配置通过序列化来解析
    configByte, err := json.Marshal(config.Root)
    var (
        allConf AllConf
    )
    if err = json.Unmarshal(configByte, &allConf); err != nil {
        log.Fatal("json.Unmarshal(configByte, &mysqlConf) is failed, err: ", err)
    }
    // log 的 path 还需要拼接
    allConf.LogConf.LogPath = projectDir + allConf.LogConf.LogPath
    log.Printf("allConf: %v", allConf)
    Configs = &allConf
}
